package middleware

import (
	"a-common/myerr"
	"errors"
	"log/slog"

	"github.com/gofiber/fiber/v2"
)

// ErrorHandler 错误处理中间件
func ErrorHandler() fiber.Handler {
	return func(c *fiber.Ctx) error {
		// 调用下一个处理程序（中间件或路由处理程序）
		if err := c.Next(); err != nil {
			// 如果在调用过程中发生错误，则捕获它
			var myErr *myerr.MyError
			if errors.As(err, &myErr) {
				// 如果是自定义错误类型，返回相应的JSON响应
				return c.Status(myerr.CODE_405).JSON(myErr)
			}
			// 对于其他类型的错误，返回通用的错误响应
			slog.Error(err.Error())
			return c.Status(myerr.CODE_500).JSON(myerr.ERR_SYS_SERVER)
		}
		// 如果没有错误，则继续处理
		return nil
	}
}
